
libmystdio.so: my_stdio.o my_string.o
	@gcc -shared -o $@ $^  # 动态库使用gcc -shared链接，生成.so文件
	@echo "build $^ to $@ ... done"

# 生成 .o 文件（动态库需要-fPIC参数生成位置无关代码）
%.o: %.c
	@gcc -c -fPIC $<  # -fPIC是动态库必需的编译参数
	@echo "compling $< to $@ ... done"

.PHONY:clean
clean:
	@rm -f *.a *.o *.so stdc stdc.tgz  # 清理时增加对.so文件的删除
	@echo "clean ... done"

.PHONY:output
output:
	@mkdir -p stdc/include
	@mkdir -p stdc/lib
	@cp -f *.h stdc/include
	@cp -f *.so stdc/lib  # 打包时复制.so动态库而非.a静态库
	@tar -czf stdc.tgz stdc     
	@echo "output stdc ... done"
# 安装：拷贝头文件和库到系统目录
.PHONY: install
install:
	# 安装头文件
	sudo cp my_stdio.h my_string.h /usr/include/
	# 安装静态库（若为静态库则替换为 .a 文件）
	sudo cp libmystdio.so /usr/lib64/
	# 若为动态库，需更新缓存（静态库可省略）
	sudo ldconfig
	@echo "安装完成：头文件到 /usr/include，库文件到 /usr/lib"


